HJS

Flex와 Grid

Flex와 Grid는 CSS의 강력한 레이아웃 시스템입니다. 각각의 특징과 사용법을 자세히 살펴 보겠습니다.

1️⃣ FlexBox (Flexible Box)

Flexbox는 1차원(가로 또는 세로) 레이아웃을 구성하는데 최적화된 CSS 레이아웃 방식입니다.

🔹기본 개념

🔹주요 속성

📌 부모 요소 (Flex Container) 속성

속성설명
display: flex;Flexbox 활성화
flex-direction주축 방향 설정 (row, column, row-reverse, column-reverse)
justify-content주축 정렬 (flex-start, flex-end, center, space-between, space-around, space-evenly)
align-items교차축 정렬 (flex-start, flex-end, center, stretch, baseline)
align-content여러 줄 정렬 (wrap이 필요, flex-start, flex-end, center, space-between, space-around, stretch)
flex-wrap요소를 여러 줄로 나눌지 설정 (nowrap, wrap, wrap-reverse)

📌 자식 요소 (Flex Items) 속성

속성설명
flex-grow남은 공간을 차지하는 비율 (기본값 0)
flex-shrink축소 비율 (기본값 1)
flex-basis기본 크기 설정
flexflex-grow, flex-shrink, flex-basis의 단축 속성
align-self 개별 요소의 교차축 정렬 (auto, flex-start, flex-end, center, stretch, baseline)



2️⃣ Grid

Grid는 2차원(행과 열) 레이아웃을 만들기 위한 강력한 CSS 시스템입니다.

🔹기본 개념

📌 부모 요소 (Grid Container) 속성

속성설명
display: grid;Grid 활성화
grid-template-columns열 정의 (repea(), auto-fit, auto-fill, fr 단위 사용 가능)
grid-template-rows행 정의
grid-gap 또는 gap그리드 간격 (row-gap, column-gap)
grid-auto-rows자동 행 크기 설정
grid-auto-columns자동 열 크기 설정
grid-template-areas특정 영역을 이름으로 설정
justify-items가로 정렬 (start, end, center, stretch)
align-items세로 정렬 (start, end, center, stretch)

📌 자식 요소 (Grid Items) 속성

속성설명
grid-column열의 시작과 끝 지정 (grid-column: 1 / 3;)
grid-row행의 시작과 끝 지정 (grid-row: 2 / 4;)
grid-area지정된 영역에 배치 (grid-area: header;)



3️⃣ 문제🎯

🔹 문제1: Flexbox 레아이웃 만들기

요구 사항

<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>
정답 보기 🔍
.container {
    display: flex;
}
.item:nth-child(1) { flex: 2; background: red; }
.item:nth-child(2) { flex: 1; background: blue; }
.item:nth-child(3) { flex: 3; background: green; }
.item {
    height: 100px;
    text-align: center;
    color: white;
    font-size: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
}

Flex-example


🔹문제2: Grid 레이아웃 만들기

요구 사항

<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>
정답 보기 🔍
.container {
    display: grid;
    grid-template-columns: repeat(2, 100px);
    grid-template-rows: repeat(2, 100px);
    gap: 10px;
}
.item:nth-child(1) {
    grid-column: span 2;
    background: lightcoral;
}
.item:nth-child(2) { background: lightblue; }
.item:nth-child(3) { background: lightgreen; }

.item {
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 20px;
}

Grid-example